// 邮箱验证码工具类
export class EmailCodeManager {
  constructor(email) {
    this.email = email
    this.storageKey = `email_code_${email}`
    this.duration = 60 // 60秒倒计时
  }

  /**
   * 开始倒计时
   * @returns {number} 剩余时间（秒）
   */
  startCountdown() {
    const endTime = Date.now() + this.duration * 1000
    localStorage.setItem(this.storageKey, endTime.toString())
    return this.duration
  }

  /**
   * 获取剩余时间
   * @returns {number} 剩余时间（秒），0表示已过期
   */
  getRemainingTime() {
    const endTimeStr = localStorage.getItem(this.storageKey)
    if (!endTimeStr) {
      return 0
    }

    const endTime = parseInt(endTimeStr, 10)
    const now = Date.now()
    const remaining = Math.ceil((endTime - now) / 1000)

    return remaining > 0 ? remaining : 0
  }

  /**
   * 检查是否可以发送验证码
   * @returns {boolean} true表示可以发送，false表示需要等待
   */
  canSendCode() {
    return this.getRemainingTime() === 0
  }

  /**
   * 清除倒计时
   */
  clearCountdown() {
    localStorage.removeItem(this.storageKey)
  }

  /**
   * 格式化显示时间
   * @param {number} seconds - 秒数
   * @returns {string} 格式化后的时间字符串
   */
  static formatTime(seconds) {
    if (seconds <= 0) {
      return '获取验证码'
    }
    return `${seconds}s后重新发送`
  }
}

// 创建单例管理器
const managers = new Map()

/**
 * 获取邮箱验证码管理器
 * @param {string} email - 邮箱地址
 * @returns {EmailCodeManager} 验证码管理器实例
 */
export function getEmailCodeManager(email) {
  if (!managers.has(email)) {
    managers.set(email, new EmailCodeManager(email))
  }
  return managers.get(email)
}

/**
 * 清除所有验证码管理器
 */
export function clearAllEmailCodeManagers() {
  managers.clear()
}
